package pck_tramitedocu.pck_web;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import pck_tramitedocu.pck_src.pck_utiles.Cls_Parametros;

public class AjaxUploadStatusServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        FileUploadListener.FileUploadStats stats = (FileUploadListener.FileUploadStats) request.getSession().getAttribute("FILE_UPLOAD_STATS");

        if (stats != null) {
            response.addHeader("Cache-Control", "no-store, no-cache, must-revalidate");
            response.addHeader("Cache-Control", "post-check=0, pre-check=0");
            response.addHeader("Pragma", "no-cache");
            double percentComplete = stats != null ? (percentComplete = stats.getPercentComplete()) : 0.0D;
            long bytesProcessed = stats.getBytesRead();
            long sizeTotal = stats.getTotalSize();
            DecimalFormat decFormatter = new DecimalFormat("0.00");
            long elapsedTimeInMilliseconds = stats.getElapsedTimeInMilliseconds();
            double bytesPerMillisecond = bytesProcessed / (elapsedTimeInMilliseconds + 1.E-05D);
            long estimatedMillisecondsLeft = (long) ((sizeTotal - bytesProcessed) / (bytesPerMillisecond + 0.00001));
            String timeLeft = null;
            if (estimatedMillisecondsLeft / 3600L > 24L) {
                timeLeft = estimatedMillisecondsLeft / 3600L + "hours";
            } else {
                Calendar c = new GregorianCalendar();
                long ad = estimatedMillisecondsLeft - (c.get(15) + c.get(16));
                timeLeft = new SimpleDateFormat("HH:mm:ss").format(Long.valueOf(ad));
            }

            double[] data = {Double.parseDouble("" + request.getSession().getAttribute("TAM_FILE")), Double.parseDouble("" + request.getSession().getAttribute(Cls_Parametros.TAMANIO_ARCHIVOS_MB))};

            PrintWriter out = response.getWriter();
            if (aceptaOtroArchivo(data)) {
                String nombre_archivo = "" + request.getSession().getAttribute("NOMBRE_FILE");
                String tamanio_archivo = decFormatter.format(sizeTotal / 1000000.0D);
                if (request.getSession().getAttribute("TIP_FILE") != null) {
                    out.print("<div class='prog-border'><div class='prog-bar' style='width: " + percentComplete * 100.0D + "%;'></div></div>");
                    out.print("<div id='tbl_progress'>" + nombre_archivo.toUpperCase() + "<br>" + tamanio_archivo + " mb ");
                    out.print("</div>");
                }
                if ((stats.getCurrentStatus() == FileUploadListener.FileUploadStatus.DONE) || (stats.getCurrentStatus() == FileUploadListener.FileUploadStatus.ERROR)) {
                    out.println("<script>");
                    if (request.getSession().getAttribute("TIP_FILE") != null) {
                        out.println("jAlert('SE SUBIO ARCHIVO CORRECTAMENTE');pausarLoad('ext');");
                    } else {
                        nombre_archivo = nombre_archivo + "|" + tamanio_archivo + "|";
                        out.println("jAlert('SE SUBIO ARCHIVO CORRECTAMENTE');agregarArchivoAdjuntoDesdeServlet('" + nombre_archivo + "');pausarLoad('');");
                    }

                    out.println("setTimeout(\"stoppage_checkUploadStatus()\", 500);toggleButton('submit_button');");
                    out.println("</script>");
                }
            } else {
                out.println("<script>");
                out.println("jAlert('ERROR EN SUBIR ARCHIVO, TAMAÑO MAXIMO DE TODOS LOS ARCHIVOS ES 2Mb');pausarLoad('');");
                out.println("setTimeout(\"stoppage_checkUploadStatus()\", 500);toggleButton('submit_button');");
                out.println("clearMessageDiv();");
                out.println("</script>");
            }
            out.flush();
        } else {
            PrintWriter out = response.getWriter();
            out.println("<script>");
            out.println("setTimeout(\"stoppage_checkUploadStatus()\", 500);toggleButton('submit_button');");
            out.println("</script>");
            out.flush();
        }
    }

    private boolean aceptaOtroArchivo(double[] data) {
        double tamanio_session = data[0];
        return tamanio_session <= data[1];
    }
}
